package com.xxxx.yoyo.service.impl;

import java.util.List;

import com.xxxx.yoyo.bean.Goods;
import com.xxxx.yoyo.bean.Top;
import com.xxxx.yoyo.bean.Type;
import com.xxxx.yoyo.dao.IGoodsDao;
import com.xxxx.yoyo.dao.ITypeDao;
import com.xxxx.yoyo.dao.impl.GoodsDaoImpl;
import com.xxxx.yoyo.dao.impl.TypeDaoImpl;
import com.xxxx.yoyo.service.IGoodsService;
import com.xxxx.yoyo.service.ITopService;

public class GoodsServiceImpl implements IGoodsService {

	private IGoodsDao goodsDao = new GoodsDaoImpl();
	private ITypeDao typeDao = new TypeDaoImpl();
	private ITopService topSevice = new TopServiceImpl();
	
	/**
	 * 根据榜单type查询宠物列表
	 * @param type 值为1表示今日推荐, 值为2表示热销 值为3表示新品
	 * @return 返回查询到的宠物列表
	 */
	@Override
	public List<Goods> getGoodsListByHotType(int type) {
		List<Goods> goodsList = goodsDao.selectGoodsListByHotType(type);
		for(Goods goods : goodsList) {
			//获取宠物的分类id
			Integer typeId = goods.getTypeId();
			Type t = typeDao.selectTypeById(typeId);
			goods.setType(t);
		}
		return goodsList;
	}

	/**
	 * 根据宠物分类的id查询宠物列表
	 * @param typeId 宠物分类的id
	 * @return 返回查到的宠物列表
	 */
	@Override
	public List<Goods> getGoodsListByTypeId(int typeId) {
		List<Goods> goodsList = goodsDao.selectGoodsListByTypeId(typeId);
		return goodsList;
	}

	
	/**
	 * 根据宠物分类的id,页码以及每页条数查询宠物列表
	 * @param typeId 宠物分类的id
	 * @param page 页码
	 * @param size 每页条数
	 * @return 返回查到的宠物列表
	 */
	@Override
	public List<Goods> getGoodsListByTypeId(int typeId, int page, int size) {
		List<Goods> goodsList = goodsDao.selectGoodsListByTypeId(typeId, page, size);
		return goodsList;
	}

	/**
	 * 根据宠物类型的id,查询宠物的个数
	 * @param typeId 宠物类型的id
	 * @return 返回对应分类下宠物的条数
	 */
	@Override
	public long getGoodsCountByTypeId(int typeId) {
		long count = goodsDao.selectGoodsCountByTypeId(typeId);
		return count;
	}

	/**
	 * 根据榜单type,page,size查询宠物列表
	 * @param hotType 值为1表示今日推荐, 值为2表示热销 值为3表示新品
	 * @param page 当前页码
	 * @param size 每页的条数
	 * @return 返回查询到的宠物列表
	 */
	@Override
	public List<Goods> getGoodsListByHotType(int hotType, int page, int size) {
		List<Goods> goodsList = goodsDao.selectGoodsListByHotType(hotType, page, size);
		
		//遍历宠物列表
		for(int i=0 ; i<goodsList.size() ; i++){
			//获取宠物
			Goods goods = goodsList.get(i);
			//获取宠物分类的id
			int typeId = goods.getTypeId();
			//根据宠物分类的id获取宠物分类
			Type type = typeDao.selectTypeById(typeId);
			//把分类信息设置给宠物
			goods.setType (type);
			
			//查看宠物属于哪个榜单
			//1.获取宠物1d
			int goodsId = goods.getId();
			//2.查询宠物所属的榜单
			List<Top> topList = topSevice.getTopListByGoodsId(goodsId);
			//3.遍历榜单列表
			for(int j=0 ; j < topList.size() ; j++){
				//获取榜单
				Top top = topList.get(j);
				
				//获取榜单类型  1表示今日推荐 2表示热销推荐 3表示新品推荐
				int topType = top.getType();
				switch(topType){
				case 1:
					goods.setTopToday(true);
					break;
				case 2:
					goods.setTopHot (true);
					break;
				case 3:
					goods.setTopNew(true);
					break;
				}
			}
		}
		
		return goodsList;
	}

	/**
	 * 根据榜单类型,查询宠物的个数
	 * @param type 榜单类型 1表示今日推荐, 值为2表示热销 值为3表示新品
	 * @return 返回对应榜单下宠物的条数
	 */
	@Override
	public long getGoodsCountByHotType(int type) {
		long count = goodsDao.selectGoodsCountByHotType(type);
		return count;
	}

	/**
	 * 按关键字keyword,page,size查询宠物列表
	 * @param keyword 宠物关键字
	 * @param page 页码
	 * @param size 每页条数
	 * @return 返回查询到的结果
	 */
	@Override
	public List<Goods> getGoodsListByKeyword(String keyword, int page, int size) {
		List<Goods> goodsList = goodsDao.selectGoodsListByKeyword(keyword, page, size);
		return goodsList;
	}

	/**
	 * 查询包含指定关键字的宠物的个数
	 * @param keyword 宠物关键字
	 * @return 返回包含指定关键字的宠物的数量
	 */
	@Override
	public long getGoodsCountByKeyword(String keyword) {
		long count = goodsDao.selectGoodsCountByKeyword(keyword);
		return count;
	}

	/**
	 * 根据宠物的id查询宠物
	 * @param id 宠物的id
	 * @return 返回查询到的宠物
	 */
	@Override
	public Goods getGoodsById(int id) {
		Goods goods = goodsDao.selectGoodsById(id);
		//获取宠物的分类id
		int typeId = goods.getTypeId();
		//根据宠物分类的id查询分类信息
		Type type = typeDao.selectTypeById(typeId);
		//把分类信息设置到宠物上
		goods.setType(type);
		
		return goods;
	}

	/**
	 * 根据分页信息获取宠物列表
	 * @param page 页码
	 * @param size 每页条数
	 * @return 返回查到的宠物列表
	 */
	@Override
	public List<Goods> getGoodsList(int page, int size) {
		//获取宠物列表
		List<Goods> goodsList = goodsDao.selectGoodsList(page, size);
		//遍历宠物列表
		for(int i=0 ; i < goodsList.size() ; i++){
			//获取宠物
			Goods goods = goodsList.get(i);
			//获取宠物分类的id
			int typeId = goods.getTypeId();
			//根据宠物分类的id获取宠物分类
			Type type = typeDao.selectTypeById(typeId);
			//把分类信息设置给宠物
			goods.setType (type);
			
			//查看宠物属于哪个榜单
			//1.获取宠物id
			int goodsId = goods.getId();
			//2.查询宠物所属的榜单
			List<Top> topList = topSevice.getTopListByGoodsId(goodsId);
			//3.遍历榜单列表
			for(int j=0 ; j < topList.size() ; j++){
				//获取榜单
				Top top = topList.get(j);
				
				//获取榜单类型  1表示今日推荐 2表示热销推荐 3表示新品推荐
				int topType = top.getType();
				switch(topType){
				case 1:
					goods.setTopToday(true);
					break;
				case 2:
					goods.setTopHot (true);
					break;
				case 3:
					goods.setTopNew(true);
					break;
				}
			}
		}
		
		return goodsList;
	}

	/**
	 * 获取宠物总数量
	 * @return 返回宠物总数量
	 */
	@Override
	public long getGoodsCount() {
		long count = goodsDao.selectGoodsCount();
		return count;
	}

	/**
	 * 添加宠物
	 * @param goods 宠物
	 * @return 添加成功返回true，失败返回false
	 */
	@Override
	public boolean addGoods(Goods goods) {
		int row = goodsDao.insertGoods(goods);
		if(row == 1){
			return true;
		}else {
			return false;
		}
	}

	/**
	 * 根据宠物的id删除宠物
	 * @param goodsId 宠物id
	 * @return 删除成功返回true，失败返回false
	 */
	@Override
	public boolean deleteGoodsById(int goodsId) {
		int row = goodsDao.deleteGoodsById(goodsId);
		if(row == 1){
			return true;
		}else {
			return false;
		}
	}

	/**
	 * 更新宠物信息
	 * @param goods 宠物信息
	 * @return 成功返回true，失败返回false
	 */
	@Override
	public boolean updateGoods(Goods goods) {
		int row = goodsDao.updateGoods (goods);
		if(row == 1){
			return true;
		}else {
			return false;
		}
	}

}
